package com.cyy;

import java.util.LinkedList;
import java.util.List;

/**
 * 普通队列
 * @author 会玩的洋洋
 * @since 2022-02-22
 * @param <E>
 *
 * 队列是一种特殊的线性表，只能在头尾两端进行操作
 *
 * 队尾（rear）：只能从队尾添加元素，一般叫做enQueue，入队
 *
 * 队头（front）：只能在对头移除元素，一般叫做deQueue，出队
 *
 * 先进先出的原则，First In First Out，FIFO
 */
public class Queue<E> {
    /**
     * 由于 JDK 使用的 LinkedList 是继承的 Deque 父类、实现的 Queue 接口，
     * 因此我们完全可以通过 LinkedList 来对队列进行实现
     */
    private List<E> list = new LinkedList<>();

    /**
     * 数据数量
     * @return int
     */
    public int size() {
        return list.size();
    }

    /**
     * 判断是否为 空
     * @return boolean
     */
    public boolean isEmpty() {
        return list.isEmpty();
    }

    /**
     * 入队
     * @param element 入队元素
     */
    public void enQueue(E element) {
        list.add(element);
    }

    /**
     * 出队
     * @return E
     */
    public E deQueue() {
        return list.remove(0);
    }

    /**
     * 查看队头
     * @return E
     */
    public E front() {
        return list.get(0);
    }

    /**
     * 清空元素
     */
    public void clear() {
        list.clear();
    }

}
